package editro.model {
	import editro.model.AntTargetVO;
	import editro.model.BindingVO;
	import editro.view.components.AntTaskView;
	import org.robotlegs.mvcs.Actor;

	/**
	 * ...
	 * @author LEEF LEE_LEAF918@163.COM_QQ969442267
	 */
	public class AntTaskVOListModel extends Actor {
		//存储一个TASK的显示对象

		private var _taskViewList:Array = [];
		private var _bindingList:Vector.<BindingVO> = new Vector.<BindingVO>()

		public function AntTaskVOListModel(){

		}

		public function pushTaskItem(o:AntTaskView):void {
			_taskViewList.push(o);
		}

		/**
		 * 返回现在ANT的任务的数量
		 * @return
		 */
		public function getTasksLength():uint {
			return _taskViewList.length;
		}

		/**
		 *
		 * @return 绑定关系的数量
		 */
		public function getBindingLength():uint {
			return _bindingList.length;
		}

		/**
		 * 加入一个关系连线，四个参数，两个VO和VO其中的ARCHOR点的序号
		 * @param	vo1
		 * @param	vo1archorIndex
		 * @param	vo2
		 * @param	vo2archorINdex
		 */
		public function pushBindingLink(vo1:AntTargetVO, vo1archorIndex:uint, vo2:AntTargetVO, vo2archorINdex:uint):void {
			_bindingList.push(new BindingVO(vo1, vo1archorIndex, vo2, vo2archorINdex));
			//此处重要::这里就设定了依赖关系
			vo1.targetDependedOnVO = vo2;
		}

		/**
		 * 根据一个VO和此VO的ARCHOR 位置，取得包括此VO的BINDINGVO，只能返回一个，正常情况下。
		 * @param	vo
		 * @param	v
		 */
		public function getBindingLink(vo:AntTargetVO, v:uint):BindingVO {
			for each (var item:BindingVO in _bindingList){
				if ((item._linkStartTartgetVO == vo && item._preIndex == v) || (item._linkEndTargetVO == vo && item._rearIndex == v)){
					return item;
				}
			}
			return null;
		}

		/**
		 * 移除一个关系的连线
		 * @param	bindVO
		 */
		public function removeBindingLink(_bindVO:BindingVO):void {
			//遍历所有的，把有用的留下
			var tmV:Vector.<BindingVO> = new Vector.<BindingVO>();
			for each (var item:BindingVO in _bindingList){
				if (_bindVO !== item)
					tmV.push(item);
			}
			_bindingList = tmV;
			//解除依赖关系
			_bindVO._linkStartTartgetVO.targetDependedOnVO = null;
		}

		/**
		 * 判断两个VO间是否已经有了关系
		 * @param	vo1
		 * @param	vo2
		 * @return
		 */
		public function getATETaskBinging(vo1:AntTargetVO, vo2:AntTargetVO):Boolean {
			for each (var item:BindingVO in _bindingList){
				if (((item._linkStartTartgetVO == vo1) && (item._linkEndTargetVO == vo2)) || ((item._linkEndTargetVO == vo1) && (item._linkStartTartgetVO == vo2))){
					return true;
				}
			}
			return false;
		}

		/**
		 * 取得现在的TARGET数量
		 */
		public function get taskViewList():Array {
			return _taskViewList;
		}

		/**
		 * 绑定的数量
		 */
		public function get bindingList():Vector.<BindingVO> {
			return _bindingList;
		}
	}

}